// 引入工具类
let mysqlUtil = require("../utils/mysql-util");

// 声明一个同步方法, 这里要求有 SQL 语句的基础
// 在 beginTransaction 和 commit 之间可以执行多次 query 方法
let ceshi = async function () {
    // 获取连接
    let conn = await mysqlUtil();
    // 开启事物
    await new Promise((resolve, reject) => {
        conn.beginTransaction(err => {
            if (err) {
                reject(err);
            } else {
                resolve();
            }
        });
    });
    // 执行第一个 SQL 语句
    let result1 = await new Promise((resolve, reject) => {
        let sqlStr = "INSERT INTO user (UserName, UserSex) values (?, ?)";
        let sqlParam = ["姓名2", 0];
        conn.query(sqlStr, sqlParam, function (err, ret) {
            if (err) {
                // 回滚之前的数据库操作, 直至碰到 beginTransaction
                return conn.rollback(() => {
                    resolve(err);
                });
            }
            resolve(ret);
        });
    });
    console.log(result1);
    // 执行第二个 SQL 语句
    let result2 = await new Promise((resolve, reject) => {
        let sqlStr = "SELECT * FROM user";
        //let sqlStr = "SELEC * FROM user"; // 错误的 SQL 语句
        conn.query(sqlStr, function (err, ret) {
            if (err) {
                // 回滚之前的数据库操作, 直至碰到 beginTransaction
                return conn.rollback(() => {
                    resolve(err);
                });
            }
            resolve(ret);
        });
    });
    console.log(result2);
    // 关闭事务
    await new Promise((resolve, reject) => {
        conn.commit(err => {
            if (err) {
                reject(err);
            } else {
                resolve();
            }
        });
    });　　 conn.release();
};

// 调用测试方法
ceshi();
